﻿namespace SugarTank.Mobile.Managers.Contracts
{
    using System;
    using CommonTypes.Phone;
    using Helpers;
    using Microsoft.Phone.Tasks;

    public interface IChooserManager
    {
        /// <summary>
        /// Occurs when [save phone number task completed].
        /// </summary>
        event EventHandler<EventArgs<TaskResult>> SavePhoneNumberTaskCompleted;

        /// <summary>
        /// Occurs when [save phone number task failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> SavePhoneNumberTaskFailed;

        /// <summary>
        /// Occurs when [choose photo task completed].
        /// </summary>
        event EventHandler<EventArgs<PhotoResult>> ChoosePhotoTaskCompleted;

        /// <summary>
        /// Occurs when [choose photo task failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> ChoosePhotoTaskFailed;

        /// <summary>
        /// Occurs when [save email address task completed].
        /// </summary>
        event EventHandler<EventArgs<TaskResult>> SaveEmailAddressTaskCompleted;

        /// <summary>
        /// Occurs when [save email address task failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> SaveEmailAddressTaskFailed;

        /// <summary>
        /// Occurs when [choose phone number completed].
        /// </summary>
        event EventHandler<EventArgs<PhoneNumberResult>> ChoosePhoneNumberCompleted;

        /// <summary>
        /// Occurs when [choose phone number failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> ChoosePhoneNumberFailed;

        /// <summary>
        /// Occurs when [choose email completed].
        /// </summary>
        event EventHandler<EventArgs<EmailResult>> ChooseEmailCompleted;

        /// <summary>
        /// Occurs when [choose email failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> ChooseEmailFailed;

        /// <summary>
        /// Occurs when [take picture completed].
        /// </summary>
        event EventHandler<EventArgs<PhotoResult>> TakePhotoCompleted;

        /// <summary>
        /// Occurs when [take picture failed].
        /// </summary>
        event EventHandler<EventArgs<Exception>> TakePhotoFailed;

        /// <summary>
        /// Saves the phone number.
        /// </summary>
        /// <param name="number">The number.</param>
        void SavePhoneNumber(PhoneNumber number);

        /// <summary>
        /// Saves the email address.
        /// </summary>
        /// <param name="emailAddress">The email address.</param>
        void SaveEmailAddress(string emailAddress);

        /// <summary>
        /// Chooses the photo.
        /// </summary>
        void ChoosePhoto();

        /// <summary>
        /// Chooses the phone number.
        /// </summary>
        void ChoosePhoneNumber();

        /// <summary>
        /// Chooses the email.
        /// </summary>
        void ChooseEmail();

        /// <summary>
        /// Takes a photo.
        /// </summary>
        void TakePhoto();
    }
}